package cn.kmsoft.crypto;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.UnsupportedEncodingException;

/**
 * Base64编码，是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法。
 *
 * 严格来说Base64并不是一种加密/解密算法，而是一种编码方式。
 * Base64不生成密钥，通过Base64编码后的密文就可以直接“翻译”为明文，但是可以通过向明文中添加混淆字符来达到加密的效果。
 */
public class Base64Util {
    /**
     * 编码
     *
     * @param str
     * @return
     */
    public static String encode(String str) {
        byte[] b = null;
        String strWithBase64 = null;
        try {
            b = str.getBytes("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        if (b != null) {
            strWithBase64 = new BASE64Encoder().encode(b);
        }
        return strWithBase64;
    }

    /**
     * 译码
     *
     * @param strWithBase64
     * @return
     */
    public static String decode(String strWithBase64) {
        byte[] b = null;
        String result = null;
        if (strWithBase64 != null) {
            BASE64Decoder decoder = new BASE64Decoder();
            try {
                b = decoder.decodeBuffer(strWithBase64);
                result = new String(b, "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    public static void main(String[] args) {
        System.out.println(Base64Util.encode("你们好！！！"));
        System.out.println(Base64Util.decode("5L2g5Lus5aW977yB77yB77yB"));
    }


}
